package com.example.demo.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;

/**
 * Swagger配置
 * 用于API文档生成和测试
 */
@Configuration
public class SwaggerConfig {
    
    @Bean
    public Docket api() {
        return new Docket(DocumentationType.OAS_30)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.example.demo.controller"))
                .paths(PathSelectors.any())
                .build();
    }
    
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("订单管理系统 - Enums框架示例")
                .description("演示 Enums Spring Boot Starter 框架的各种功能\n\n" +
                        "主要特性：\n" +
                        "• 枚举自动转换：前端传递code值，后端自动转换为枚举对象\n" +
                        "• 数据库存储：枚举以数字形式存储，节省空间\n" +
                        "• JSON序列化：响应数据中枚举自动转换为code值\n" +
                        "• 码表查询：一键获取所有枚举的码表数据\n" +
                        "• 类型安全：编译时类型检查，避免运行时错误\n\n" +
                        "使用说明：\n" +
                        "1. 查看 /api/enums 获取所有枚举码表\n" +
                        "2. 在请求中使用枚举的code值（数字）\n" +
                        "3. 响应数据中的枚举字段为code值\n" +
                        "4. 可以同时查看对应的文本值（如statusText）")
                .version("1.0.0")
                .contact(new Contact("Enums Framework", "https://github.com/your-repo", "support@example.com"))
                .build();
    }
}
